import entity.TreeNode;

public class MinimumAbsoluteDifferenceInBst {
    /*
    * 530. 二叉搜索树的最小绝对差
    * 给你一个二叉搜索树的根节点 root ，返回 树中任意两不同节点值之间的最小差值 。
    * 差值是一个正数，其数值等于两值之差的绝对值。
    *
    * 树中节点的数目范围是 [2, 10^4]
    * 0 <= Node.val <= 10^5
    * */
    public static void main(String[] args){

    }

    // 我的想法：这题还是考察二叉搜索树的性质，最小差值一定出现在某个子树的根节点和儿子节点的差值处
    // 又错了，别给二叉搜索树乱加性质，还是那句话按照中序遍历的顺序来一个个减，
    // 因为只有中序是单调递增的！！！
    int min = Integer.MAX_VALUE;
    TreeNode pre;
    public int mySolution(TreeNode root){
        traversal(root);
        return min;
    }
    private void traversal(TreeNode root){
        if(root == null)
            return;
        traversal(root.left);
        if(pre != null){
            int abs = Math.abs(root.val - pre.val);
            min = abs < min ? abs : min;
        }
        pre = root;
        traversal(root.right);
    }
    // 反思，始终记住！和二叉搜索树的节点值的大小顺序有关的题目，
    // 一定好好利用其中序遍历单调递增这个特性
}
